﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AlgoritimoGenetico.ambiente;

namespace PernambucoImortal
{
    public partial class FMain : Form
    {
        List<byte> perfilTurista = new List<byte>();
        
        
        public FMain()
        {
            InitializeComponent();
        }

        private void _mountProfile()
        {
            /*perfilTurista.Add(_checkBoxToByte(chkBoxShows));
            perfilTurista.Add(_checkBoxToByte(chkBoxConsHist));
            perfilTurista.Add(_checkBoxToByte(chkBoxApoio));
            perfilTurista.Add(_checkBoxToByte(chkBoxPraias));
            perfilTurista.Add(_checkBoxToByte(chkBoxCachoeiras));
            perfilTurista.Add(_checkBoxToByte(chkBoxArtesanato));
            perfilTurista.Add(_checkBoxToByte(chkBoxParques));
            perfilTurista.Add(_checkBoxToByte(chkBoxEcoTur));
            perfilTurista.Add(_checkBoxToByte(chkBoxHospit));
            perfilTurista.Add(_checkBoxToByte(chkBoxBancos));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotLuxo));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotMtConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotMeConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotSimp));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor20));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor40));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor60));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMaior60));
            perfilTurista.Add(_checkBoxToByte(chkBoxAeroporto));
            perfilTurista.Add(_checkBoxToByte(chkBoxTermRodov));
            perfilTurista.Add(_checkBoxToByte(chkBoxLocVeic));
            perfilTurista.Add(_checkBoxToByte(chkBoxSeg));
            perfilTurista.Add(_checkBoxToByte(chkBoxTranspLoc));
            perfilTurista.Add(_checkBoxToByte(chkBoxNotur));*/
            perfilTurista.Add(_checkBoxToByte(chkBoxCachoeiras));
            perfilTurista.Add(_checkBoxToByte(chkBoxConsHist));
            perfilTurista.Add(_checkBoxToByte(chkBoxBancos)); // Fortes
            perfilTurista.Add(_checkBoxToByte(chkBoxSeg)); // Grutas OK
            perfilTurista.Add(_checkBoxToByte(chkBoxShows)); // Igrejas OK
            perfilTurista.Add(_checkBoxToByte(chkBoxNotur)); // Museus OK
            perfilTurista.Add(_checkBoxToByte(chkBoxParques));
            perfilTurista.Add(_checkBoxToByte(chkBoxHospit)); // Pesca OK
            perfilTurista.Add(_checkBoxToByte(chkBoxPraias));
            perfilTurista.Add(_checkBoxToByte(chkBoxEcoTur)); // Turismo aventura OK
            perfilTurista.Add(_checkBoxToByte(chkBoxArtesanato)); // ok
            perfilTurista.Add(_checkBoxToByte(chkBoxApoio)); // ok
            perfilTurista.Add(_checkBoxToByte(chkBoxHotLuxo)); //ok
            perfilTurista.Add(_checkBoxToByte(chkBoxHotMtConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotMeConf));
            perfilTurista.Add(_checkBoxToByte(chkBoxHotSimp)); // ok
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor20));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor40));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMenor60));
            perfilTurista.Add(_checkBoxToByte(chkBoxRestMaior60)); // ok
            perfilTurista.Add(_checkBoxToByte(chkBoxTranspLoc)); // comida tipica
            perfilTurista.Add(_checkBoxToByte(chkBoxAeroporto));
            perfilTurista.Add(_checkBoxToByte(chkBoxTermRodov));
            perfilTurista.Add(_checkBoxToByte(chkBoxLocVeic));
        }

        private byte _checkBoxToByte(CheckBox checkBox)
        {
            return checkBox.Checked ? (byte)1 : (byte)0;
        }

        private void btnGerarRota_Click(object sender, Janus.Windows.Ribbon.CommandEventArgs e)
        {
            DateTime mesReferencia = this.dateTimePicker1.Value;
            perfilTurista = new List<byte>();
              _mountProfile();
            Ambiente amb = new Ambiente(/*Tamanho da População:*/50,
                                        /*Máximo de Épocas:*/1000,
                                        /*Taxa de Cruzamento:*/0.85,
                                        /*Taxa de Mutação*/0.03,
                                        /*Taxa de Elitismo:*/0.5,
                                        /*Perfil do Turista:*/perfilTurista,
                                        /*Mês de Referência:*/mesReferencia
                                        );
            MessageBox.Show(amb.Run() + "\nEpocas: "+amb._EpocaAtual);
#if(!DEBUG)
            FResult result = new FResult();
            result.ShowDialog(this);

            _LimparCaracteristicas();
#endif
        }
        private void _LimparCaracteristicas()
        {
            foreach (Control ctr in this.panel1.Controls)
            {
                if (ctr is CheckBox)
                    ((CheckBox)ctr).Checked = false;
            }
        }

        private void btnSelectAll_Click(object sender, EventArgs e)
        {
            foreach (Control ctr in this.panel1.Controls)
            {
                if (ctr is CheckBox)
                    ((CheckBox)ctr).Checked = true;
            }
        }

        private void btnSair_Click(object sender, Janus.Windows.Ribbon.CommandEventArgs e)
        {
            this.Close();
        }
    }
}
